package com.linkgie.galaxyframework.metric;

import java.util.List;
import java.util.Set;

/**
 * 指标查询服务；
 */
public interface MetricsService {

    Set<MetricDomain> getDomains();

    MetricDomain getDomain(String domainCode);

    Set<String> getDomainCodes();

    /**
     * 返回指定领域的所有指标；
     * <p>
     * 返回的 Metric 是有状态的对象，通过 {@link Metric#getValue()} 方法可以获得指标当前的实际值；
     * 
     * @param domainCode
     * @return
     */
    List<Metric> getMetrics(String domainCode);

    /**
     * 返回指定领域的所有指标；
     * <p>
     * 返回的 Metric 是有状态的对象，通过 {@link Metric#getValue()} 方法可以获得指标当前的实际值；
     * 
     * @param domain
     * @return
     */
    default List<Metric> getMetrics(MetricDomain domain) {
        return getMetrics(domain.getCode());
    }

    /**
     * 返回指标；
     * 
     * @param domainCode
     * @param metricCode
     * @return
     */
    Metric getMetric(String domainCode, String metricCode);

}
